// interfac接口实现之函数描述
// 接口能够描述jsvascript中对象拥有的各种各样的特性
// 除了描述带有属性的普通对象外, 接口也可以描述函数类型
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var fn = function (a, b) {
    return a + b;
};
fn('1', 2);
var mySearch;
mySearch = function (f, s) {
    var result = f.search(s);
    return result > -1;
};
mySearch('11', '22');
var p1 = { x: 10, y: 20 };
var colock = /** @class */ (function () {
    function colock(n, s) {
    }
    // clockDate:new Date();
    colock.prototype.getDate = function () {
        return new Date();
    };
    return colock;
}());
var Clock = /** @class */ (function () {
    function Clock(h, m) {
    }
    Clock.prototype.setTime = function (d) {
        this.currentTime = d;
    };
    return Clock;
}());
var square = {
    color: "65",
    penWidth: 1,
    sideLength: 18
};
function getCounter() {
    var counter = function (start) {
        console.log(start + "");
        return start + "";
    };
    counter.interval = 123;
    counter.reset = function () { };
    return counter;
}
var c = getCounter();
// 调用
c(10);
c.interval = 1;
c.reset();
// interface 接口实现之 接口继承类
// selectableConyrol 包含了Control的所有成员,
// 包括私有成员state
// 因为只有Control的子类才能够拥有一个声明于Contrl的私有成员state
// 这对私有成员的兼容性是必须的,
// 所以只能够是Control的子类们才能实现SelectableControl接口
var Control = /** @class */ (function () {
    function Control() {
    }
    return Control;
}());
var Button = /** @class */ (function (_super) {
    __extends(Button, _super);
    function Button() {
        return _super !== null && _super.apply(this, arguments) || this;
    }
    // 正确, 因为直接拓展自Control所以就把Control的私有属性一块继承来了
    Button.prototype.select = function () { };
    ;
    return Button;
}(Control));
// 错误: " Image " 类型缺啥 " state " 属性
var Images = /** @class */ (function (_super) {
    __extends(Images, _super);
    function Images() {
        return _super !== null && _super.apply(this, arguments) || this;
    }
    // Image 里面没有state私有属性
    Images.prototype.select = function () { };
    ;
    return Images;
}(Control));
